<?php
//  @arquivo = /controller/NoticiasController.php
//  MVC : controller
//  objeto : Noticia

require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/modelo/Noticia.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/modelo/ImagemNoticia.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/modelo/TipoNoticia.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/modelo/Usuario.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/modelo/TipoUsuario.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/controle/ImagemController.php');
require_once($_SERVER['DOCUMENT_ROOT'] . '/Prototipo/conexao/ConexaoBanco.php');
	
	class NoticiasController {
		private $noticia;
		private $tipoNoticia;
		private $usuario;
		private $tipoUsuario;
		private $banco;
		private $arrNoticias;
		private $imagemNoticia;
		var $campos = NULL;
		var $retorno =  NULL;
		
		/* construtor padrão, cria noticia, crud e banco quando instanciado */
		public function __construct(){
			$this->noticia = new Noticia();
			$this->banco = new ConexaoBanco();
			$this->tipoNoticia = new TipoNoticia();
			$this->usuario = new Usuario();
			$this->tipoUsuario = new TipoUsuario();
			$this->imagemNoticia = new ImagemNoticia();
		}
		
		public function recebePost($acao){
			// método para cadastrar noticia
			if(($acao == "cadastrar") && (isset($_POST['submit'])) ){
					
				/* // verifica se todos os campos foram preenchidos
				if (($_POST['titulo'] == NULL) || ($_POST['descricao'] == NULL) || 
					($_POST['destaque'] == NULL) || ($_POST['NoticiaConteudo'] == NULL) || 
					($_POST['id_tipo_noticia'] == NULL) || ($_POST['status'] == NULL) ) {
					echo "Preencha todos os campos!"; // mensagem de erro. substituir por alguma notificação em Ajax
					
				}
				else{ */
					$this->noticia->setTitulo(filter_input(INPUT_POST, 'titulo', FILTER_SANITIZE_SPECIAL_CHARS));
					$this->noticia->setDescricao(filter_input(INPUT_POST, 'descricao', FILTER_SANITIZE_SPECIAL_CHARS));
					$this->noticia->setDestaque(filter_input(INPUT_POST, 'destaque', FILTER_SANITIZE_SPECIAL_CHARS));
					$this->noticia->setConteudo($_POST['NoticiaConteudo']);
					$this->noticia->setDataHora(date('Y/m/d'));  //pega a data atual
					$this->usuario->setIdUsuario($_SESSION['idUsr']);
					$this->noticia->setUsuarioId($this->usuario);
					$this->tipoNoticia->setIdTipoNoticia(filter_input(INPUT_POST, 'id_tipo_noticia', FILTER_SANITIZE_SPECIAL_CHARS));
					$this->noticia->setTipoNoticiaId($this->tipoNoticia);
					$this->noticia->setStatus(filter_input(INPUT_POST, 'status', FILTER_SANITIZE_SPECIAL_CHARS));
					
					if ($this->noticia != NULL) {
						$not = new NoticiasController();
						$this->noticia->setIdNoticia($not->cadastrar($this->noticia));
						
						if ($this->noticia->getIdNoticia() != NULL) {
							$imagem = new ImagemController();
							$this->imagemNoticia = $imagem->tratarImagemWideImage($_FILES['nome_arquivo']);
							$this->imagemNoticia->setLegenda(filter_input(INPUT_POST, 'legenda', FILTER_SANITIZE_SPECIAL_CHARS));
							$this->imagemNoticia->setNoticiaId($this->noticia);
							//unset($this->noticia);  //para resetar o objeto noticia
							$imagem->cadastrar($this->imagemNoticia);
						}
						else{
							echo 'erro ao salvar noticia ou id da noticia nao foi retornado';
						}
					}
					unset($this->noticia);
					unset($this->imagemNoticia);
			}
			// editar noticia e imagem
			if($acao == "editar" && isset($_POST['submit'])){
				
				
				$this->noticia->setIdNoticia(filter_input(INPUT_POST, 'id_noticia', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->noticia->setTitulo(filter_input(INPUT_POST, 'titulo', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->noticia->setDescricao(filter_input(INPUT_POST, 'descricao', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->noticia->setDestaque(filter_input(INPUT_POST, 'destaque', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->noticia->setConteudo($_POST['NoticiaConteudo']);
				$this->noticia->setDataHora($_POST['data']);  //pega a data atual
				$this->tipoNoticia->setIdTipoNoticia(filter_input(INPUT_POST, 'id_tipo_noticia', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->noticia->setTipoNoticiaId($this->tipoNoticia);
				$this->noticia->setStatus(filter_input(INPUT_POST, 'status', FILTER_SANITIZE_SPECIAL_CHARS));
				
				if($this->noticia != NULL){
					
					$notic = new NoticiasController();
					//echo $this->noticia->getIdNoticia();
					$notic->editar($this->noticia);
					$ids = $_FILES['nome_arquivo'];
					
					if($ids['name'] != NULL){
						
						$imagem = new ImagemController();
						
						$this->imagemNoticia = $imagem->tratarImagemWideImage($_FILES['nome_arquivo']);
						$this->imagemNoticia->setLegenda(filter_input(INPUT_POST, 'legenda', FILTER_SANITIZE_SPECIAL_CHARS));
						$this->imagemNoticia->setNoticiaId($this->noticia);
						$this->imagemNoticia->setIdImagem(filter_input(INPUT_POST, 'id_imagem', FILTER_SANITIZE_SPECIAL_CHARS));
						
						//unset($this->noticia);  //para resetar o objeto noticia
						$res = $imagem->editar($this->imagemNoticia);
						if ($res == TRUE) {
							$i = explode('../', $_POST['diretorio']);
							$arq = $_SERVER['DOCUMENT_ROOT'] . '/Prototipo/visao/'.$i[1];
							echo ($arq);
							unlink($arq);
						}
						
						
						// esta fazendo esta verificação
					}
					/* if($_FILES['nome_arquivo'] = NULL){
						
						$imagem = new ImagemController();
						//$this->imagemNoticia = $imagem->tratarImagemWideImage($_FILES['nome_arquivo']);
						$this->imagemNoticia->setLegenda(filter_input(INPUT_POST, 'legenda', FILTER_SANITIZE_SPECIAL_CHARS));
						$this->imagemNoticia->setNoticiaId($this->noticia);
						$this->imagemNoticia->setIdImagem(filter_input(INPUT_POST, 'id_imagem', FILTER_SANITIZE_SPECIAL_CHARS));
						//unset($this->noticia);  //para resetar o objeto noticia
						$imagem->editar($this->imagemNoticia);
					} */
				}
				unset($this->noticia);
				//unset($this->imagemNoticia);
			}
			if($acao == "editar" && isset($_POST['excluir'])){
				$this->noticia->setIdNoticia(filter_input(INPUT_POST, 'id_noticia', FILTER_SANITIZE_SPECIAL_CHARS));
				$this->imagemNoticia->setIdImagem(filter_input(INPUT_POST, 'id_imagem', FILTER_SANITIZE_SPECIAL_CHARS));
				
				$control = new NoticiasController();
				$result = $control->excluir($this->imagemNoticia->getIdImagem(), $this->noticia->getIdNoticia());
				
				if ($result == TRUE && ($this->imagemNoticia->getIdImagem() != NULL)) {
					$i = explode('../', $_POST['diretorio']);
					$arq = $_SERVER['DOCUMENT_ROOT'] . '/Prototipo/visao/'.$i[1];
						//echo ($arq);
					unlink($arq);
				}
				
			}
		}
		
		/* cadastrar noticia - retorna o id da noticia cadastrada */
		public function cadastrar(Noticia $noticia) {
			$this->banco->conectar();
			
			try {
				$sql = "INSERT INTO noticia (id_noticia, titulo, conteudo, destaque, descricao, data_hora, status, usuario_id, tipo_noticia_id)
					VALUES
					('',
					'".$noticia->getTitulo()."',
					'".$noticia->getConteudo()."',
					'".$noticia->getDestaque()."',
					'".$noticia->getDescricao()."',
					'".$noticia->getDataHora()."',
					'".$noticia->getStatus()."',
					'".$noticia->getUsuarioId()->getIdUsuario()."',
					'".$noticia->getTipoNoticiaId()->getIdTipoNoticia()."')";
				//echo $sql;
				
				$this->banco->executarSql($sql);
				return mysql_insert_id(); //retorna o ultimo id cadastrado
				
				if($this->retorno == TRUE){
					//redireciona para uma pagina ou manda mensagem ao usuário
				}
				else{
					//manda msg de erro ao usuario
				}
				
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->banco->desconectar();
		}
		
		public function editar(Noticia $noticia) {
			$this->banco->conectar();
			try {
				$sql = "UPDATE `noticia` SET 
						`titulo`='".$noticia->getTitulo()."',
						`conteudo`='".$noticia->getConteudo()."',
						`destaque`='".$noticia->getDestaque()."',
						`descricao`='".$noticia->getDescricao()."',
						`data_hora`='".$noticia->getDataHora()."',
						`status`='".$noticia->getStatus()."',
						`usuario_id`='1',
						`tipo_noticia_id`='".$noticia->getTipoNoticiaId()->getIdTipoNoticia()."' 
						WHERE `id_noticia`='".$noticia->getIdNoticia()."'";
				//echo $sql;
				//$this->banco->executarSql($sql);
				
				if($this->banco->executarSql($sql) == TRUE){
					//redireciona para uma pagina ou manda mensagem ao usuário
					//return $this->retorno;
					//header('Location: www.google.com.br');
				}
				
				
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->banco->desconectar();
		}//fim editar
		
		public function excluir($idImagem, $noticiaId){
			$this->banco->conectar();
			
			try {
				//exclui a imagem do banco
				if($idImagem != NULL){
					$sql = "DELETE FROM imagem_noticia WHERE id_imagem_noticia = ".$idImagem;
					$this->banco->executarSql($sql);
				}//exclui a noticia referente a imagem
				$sql = "DELETE FROM noticia WHERE id_noticia = ".$noticiaId;
				$this->retorno = $this->banco->executarSql($sql);
				
				
				
				/*	verifica se foi excluido	*/
				if($this->retorno == TRUE){
					header('Location: index.php?pg=2');
				}
				else{
					//manda msg de erro ao usuario 
				}
				return $this->retorno;
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->banco->desconectar();
		}//fim excluir
		
		public function loadOptions($idPreSelecionado) { // p/ montar os combos
			$indice = 0;
			$sql = "SELECT * FROM noticia ORDER BY data DESC";
		
		
			$this->conexao->conecta();
			$rs = $this->conexao->executeQuery($sql);
		
			while ($row = mysql_fetch_array($rs)) {
					
				$this->noticia->setIdNoticia($row['id_noticia']);
				$this->noticia->setTitulo($row['titulo']);
				$this->noticia->setDestaque($row['destaque']);
				$this->noticia->setDescricao($row['descricao']);
				$this->noticia->setDataHora($row['data_hora']);
				$this->noticia->setStatus($row['status']);
				$this->noticia->setUsuarioId($row['usuario_id']);
				$this->noticia->setTipoNoticiaId($row['tipo_usuario_id']);
				///$this->noticia->setPalavrasChave();
				$this->arrNoticias[$indice] = $this->noticia;
				$indice++;
			}
		
			$this->conexao->desconecta();
			return $this->arrNoticias;
		}
		
		public function getDadosPaginados($primeiroRegistro, $numPorPagina, $buscaUsuario) {
			$sql = "SELECT * FROM noticia, tipo_noticia, usuarios WHERE 
					(noticia.tipo_noticia_id = tipo_noticia.id_tipo_noticia) 
					AND (noticia.usuario_id = usuario.id_usuario)
					"; //falta as palavras chave
			if ($buscaUsuario != NULL) {
				$sql .= " LIKE '%".$buscaUsuario."%' ";
			}
		
			$sql .= " LIMIT ".$primeiroRegistro.",".$numPorPagina;
		
			$this->conexao->conectar();
			$rs = $this->conexao->executarConsulta($sql);
			while ($row = mysql_fetch_array($rs)) {
				$noticia = new Noticia();
				$noticia->setIdNoticia($row['id_noticia']);
				$noticia->setTitulo($row['titulo']);
				$noticia->setDestaque($row['destaque']);
				$noticia->setDescricao($row['descricao']);
				$noticia->setDataHora($row['data_hora']);
				$noticia->setStatus($row['status']);
				$noticia->getUsuarioId()->setIdUsuario($row["id_usuario"]);
				$noticia->getUsuarioId()->setNome($row['nome']);
				$noticia->getUsuarioId()->setEmail($row['email']);
				$noticia->getUsuarioId()->setLogin($row['login']);
				$noticia->getUsuarioId()->setSenha($row['senha']);
				$noticia->getUsuarioId()->setTipoUsuarioId($row['tipo_usuario_id']);
				$noticia->getTipoNoticiaId()->setIdTipoNoticia($row['tipo_noticia_id']);
				$noticia->getTipoNoticiaId()->setDescricao($row['descricao']);
				$line = array(
						'id_noticia' => $noticia->getIdNoticia(),
						'titulo' => $noticia->getTitulo(),
						'destaque' => $noticia->getDestaque(),
						'descricao' => $noticia->getDescricao(),
						'data_hora' => $noticia->getDataHora(),
						'status' => $noticia->getStatus(),
						'usuario_id' => array(
								'id_usuario' => $noticia->getUsuarioId()->getIdUsuario(),
								'nome' => $noticia->getUsuarioId()->getNome(),
								'email' => $noticia->getUsuarioId()->getEmail(),
								'login' => $noticia->getUsuarioId()->getLogin(),
								'senha' => $noticia->getUsuarioId()->getSenha(),
								'tipo_usuario_id' => $noticia->getUsuarioId()->getTipoUsuarioId()),
						'tipo_noticia_id' => array(
								'id_tipo_noticia' => $noticia->getTipoNoticiaId()->getIdTipoNoticia(),
								'descricao' => $noticia->getTipoNoticiaId()->getDescricao())
				);
				array_push($this->arrNoticias, $line);
			}
			$this->conexao->desconectar();
			return $this->arrNoticias;
		}
		
		public function getTotalNoticias($buscaNoticia) {
			$this->conexao->conectar();
			try {
				$sql = "SELECT COUNT(*) as total FROM noticia, tipo_noticia WHERE (noticia.tipo_noticia_id = tipo_noticia.id_tipo_noticia) ";
				if ($buscaUsuario != NULL) {
					$sql .= "AND tipo_noticia.descricao LIKE '%".$buscaNoticia."%' ";
				}
				$rs = $this->conexao->executarConsulta($sql);
				$total = 0;
				while ($row = mysql_fetch_array($rs)) {
					$total = $row['total'];
				}
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->conexao->desconectar();
		}
		
		public function loadDados($id) {
			$this->banco->conectar();
			//validar o $id
			try {
				$sql = "SELECT * FROM noticia, tipo_noticia WHERE id_noticia = $id";
				$rs = $this->banco->executarConsulta($sql);
					
				if ($row = mysql_fetch_array($rs)) {
					//$tipoUsuario = new TipoUsuario();
					$tipoNoticia = new TipoNoticia();
					//$usuario = new Usuario();
					$this->noticia->setIdNoticia($row['id_noticia']);
					$this->noticia->setTitulo($row['titulo']);
					$this->noticia->setConteudo($row['conteudo']);
					$this->noticia->setDestaque($row['destaque']);
					$this->noticia->setDescricao($row['descricao']);
					$this->noticia->setDataHora($row['data_hora']);
					$this->noticia->setStatus($row['status']);
					//falta adicionar palavras chave
					
						$tipoNoticia->setIdTipoNoticia($row['tipo_noticia_id']);
						$tipoNoticia->setDescricao($row['tipo_noticia']);
					$this->noticia->setTipoNoticiaId($tipoNoticia);
						//$usuario->setIdUsuario($row['id_usuario']);
						//$usuario->setNome($row['nome']);
						//$usuario->setEmail($row['email']);
						//$usuario->setLogin($row['login']);
						//$usuario->setSenha($row['senha']);
							//$tipoUsuario->setIdTipoUsuario($row['id_tipo_usuario']);
							//$tipoUsuario->setDescricao($row['descricao']);
						//$usuario->setTipoUsuarioId($tipoUsuario);
					//$this->noticia->setUsuarioId($usuario);
				}
				return $this->noticia;
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->conexao->desconectar();
		
		}
		
		public function loadSlider(){
			$indice = 0;
			$this->banco->conectar();
			try {
				$sql = "SELECT id_noticia, titulo FROM noticia WHERE destaque = 1 ORDER BY data_hora DESC LIMIT 3";
				$rs = $this->banco->executarConsulta($sql);
					
				while ($row = mysql_fetch_array($rs)) {
					$noticia = new Noticia();
					$noticia->setIdNoticia($row['id_noticia']);
					$noticia->setTitulo($row['titulo']);
					
					$this->arrNoticias[$indice] = $noticia;
					$indice++;
				}
				return $this->arrNoticias;
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->banco->desconectar();
		}
		
		public function getListaSimples($inicio, $quantidade, $data = NULL){//lista apenas id, titulo e data da noticia
			$indice = 0;
			$sql = "SELECT id_noticia, titulo, data_hora FROM noticia "; 
			if($data != NULL){
				$sql .= " WHERE data_hora = $data ";
			}
			
			$sql .= "ORDER BY data_hora DESC LIMIT $inicio, $quantidade";
			$this->banco->conectar();
			
			try {
				$rs = $this->banco->executarConsulta($sql);
				
				while ($row = mysql_fetch_array($rs)) {
					$noticia = new Noticia();
					$noticia->setIdNoticia($row['id_noticia']);
					
					$noticia->setTitulo($row['titulo']);
					$noticia->setDataHora($row['data_hora']);
					
					$this->arrNoticias[$indice] = $noticia;
					$indice++;
				}
				return $this->arrNoticias;
			} catch (Exception $e) {
				$e->getMessage();
			}
			$this->banco->desconectar();
		}
	public function getListaNoticias() {
		$indice = 0;
		$sql = "SELECT * FROM noticia, tipo_noticia, usuarios, tipo_usuario 
				WHERE (noticia.tipo_noticia_id = tipo_noticia.id_tipo_noticia)
				AND (noticia.usuario_id = usuarios.id_usuario) 
				AND (usuarios.tipo_usuario_id = tipo_usuario.id_tipo_usuario) ORDER BY data_hora";
		
		
		$this->banco->conectar();
		$rs = $this->banco->executarConsulta($sql);
		//print_r($rs);
		while ($row = mysql_fetch_array($rs)) {
			//print_r($row);	
			$noticia = new Noticia();
			$usuario = new Usuario();
			$tipoNoticia = new TipoNoticia();
			$tipoUsuario = new TipoUsuario();
			$noticia->setIdNoticia($row['id_noticia']);
			$noticia->setTitulo($row['titulo']);
			$noticia->setDestaque($row['destaque']);
			$noticia->setDescricao($row['descricao']);
			$noticia->setDataHora($row['data_hora']);
			$noticia->setStatus($row['status']);
				$tipoNoticia->setIdTipoNoticia($row['id_tipo_noticia']);
				$tipoNoticia->setDescricao($row['descricao']);
			$noticia->setTipoNoticiaId($tipoNoticia);
				$usuario->setIdUsuario($row['id_usuario']);
				$usuario->setNome($row['nome']);
				$usuario->setEmail($row['email']);
				$usuario->setLogin($row['login']);
				$usuario->setSenha($row['senha']);
					$tipoUsuario->setIdTipoUsuario($row['id_tipo_usuario']);
					$tipoUsuario->setDescricao($row['descricao']);
				$usuario->setTipoUsuarioId($tipoUsuario);
			$noticia->setUsuarioId($usuario);
			//$this->noticia->setPalavrasChave(/* falta no banco */);
			$this->arrNoticias[$indice] = $noticia;
			$indice++;
		}
		
		$this->banco->desconectar();
		return $this->arrNoticias;
	}	
	
}
?>